<?php


namespace app\student\security;

use app\student\model\Token as TokenModel;
use think\Session;

class StuCheck
{
    /**
     * 学生身份验证
     * @access public
     * @return integer 返回执行代码
     */
    public function check()
    {
        //Session存在教师token
        if (Session::has('token')) {
            //获取Session中的教师Token信息
            $session = Session::get('token');
            //实例化教师Token表
            $tokenModel = new TokenModel();
            //定义查询条件
            $condition = [
                'stuUsername' => $session['stuUsername'],
                'stuToken' => $session['stuToken'],
            ];
            //用户Token正确
            if ($result = $tokenModel::where($condition)->find()) {
                //获取服务器当前时间
                $currentTime = date('y-m-d h:i:s', time());
                //获取最后一次登录的时间
                $loginTime = $result['CreateTime'];
                //token存在小于5小时
                if ((strtotime($currentTime) - strtotime($loginTime)) / 3600 <= 5) {
                    //获取当前请求IP
                    $currentIp = $this->getClientIp();
                    //获取最后登录的IP
                    $loginIp = $result['stuClientIp'];
                    //Ip没有改变
                    if ($currentIp==$loginIp) {
                        return 1;
                    } else {//IP改变
                        return 401;
                    }
                } else {//时间超时
                    return 402;
                }
            } else {//token错误
                return 403;
            }
        } else {//session不存在
            return 404;
        }
    }

    /**
     * 获取客户端IP地址
     * @access private
     * @return string 返回客户端IP地址
     */
    private function getClientIp()
    {
        global $ip;
        if (getenv("HTTP_CLIENT_IP"))
            $ip = getenv("HTTP_CLIENT_IP");
        else if (getenv("HTTP_X_FORWARDED_FOR"))
            $ip = getenv("HTTP_X_FORWARDED_FOR");
        else if (getenv("REMOTE_ADDR"))
            $ip = getenv("REMOTE_ADDR");
        else $ip = "Unknow IP";
        return $ip;
    }
}